home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / include / linux / tcp.h < prev    next >
C/C++ Source or Header  |  2008-10-24  |  4KB  |  175 lines

  1. /*
  2.  * INET        An implementation of the TCP/IP protocol suite for the LINUX
  3.  *        operating system.  INET is implemented using the  BSD Socket
  4.  *        interface as the means of communication with the user level.
  5.  *
  6.  *        Definitions for the TCP protocol.
  7.  *
  8.  * Version:    @(#)tcp.h    1.0.2    04/28/93
  9.  *
  10.  * Author:    Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
  11.  *
  12.  *        This program is free software; you can redistribute it and/or
  13.  *        modify it under the terms of the GNU General Public License
  14.  *        as published by the Free Software Foundation; either version
  15.  *        2 of the License, or (at your option) any later version.
  16.  */
  17. #ifndef _LINUX_TCP_H
  18. #define _LINUX_TCP_H
  19.  
  20. #include <linux/types.h>
  21. #include <asm/byteorder.h>
  22. #include <linux/socket.h>
  23.  
  24. struct tcphdr {
  25.     __be16    source;
  26.     __be16    dest;
  27.     __be32    seq;
  28.     __be32    ack_seq;
  29. #if defined(__LITTLE_ENDIAN_BITFIELD)
  30.     __u16    res1:4,
  31.         doff:4,
  32.         fin:1,
  33.         syn:1,
  34.         rst:1,
  35.         psh:1,
  36.         ack:1,
  37.         urg:1,
  38.         ece:1,
  39.         cwr:1;
  40. #elif defined(__BIG_ENDIAN_BITFIELD)
  41.     __u16    doff:4,
  42.         res1:4,
  43.         cwr:1,
  44.         ece:1,
  45.         urg:1,
  46.         ack:1,
  47.         psh:1,
  48.         rst:1,
  49.         syn:1,
  50.         fin:1;
  51. #else
  52. #error    "Adjust your <asm/byteorder.h> defines"
  53. #endif    
  54.     __be16    window;
  55.     __sum16    check;
  56.     __be16    urg_ptr;
  57. };
  58.  
  59. /*
  60.  *    The union cast uses a gcc extension to avoid aliasing problems
  61.  *  (union is compatible to any of its members)
  62.  *  This means this part of the code is -fstrict-aliasing safe now.
  63.  */
  64. union tcp_word_hdr { 
  65.     struct tcphdr hdr;
  66.     __be32           words[5];
  67. }; 
  68.  
  69. #define tcp_flag_word(tp) ( ((union tcp_word_hdr *)(tp))->words [3]) 
  70.  
  71. enum { 
  72.     TCP_FLAG_CWR = __constant_htonl(0x00800000), 
  73.     TCP_FLAG_ECE = __constant_htonl(0x00400000), 
  74.     TCP_FLAG_URG = __constant_htonl(0x00200000), 
  75.     TCP_FLAG_ACK = __constant_htonl(0x00100000), 
  76.     TCP_FLAG_PSH = __constant_htonl(0x00080000), 
  77.     TCP_FLAG_RST = __constant_htonl(0x00040000), 
  78.     TCP_FLAG_SYN = __constant_htonl(0x00020000), 
  79.     TCP_FLAG_FIN = __constant_htonl(0x00010000),
  80.     TCP_RESERVED_BITS = __constant_htonl(0x0F000000),
  81.     TCP_DATA_OFFSET = __constant_htonl(0xF0000000)
  82. }; 
  83.  
  84. /* TCP socket options */
  85. #define TCP_NODELAY        1    /* Turn off Nagle's algorithm. */
  86. #define TCP_MAXSEG        2    /* Limit MSS */
  87. #define TCP_CORK        3    /* Never send partially complete segments */
  88. #define TCP_KEEPIDLE        4    /* Start keeplives after this period */
  89. #define TCP_KEEPINTVL        5    /* Interval between keepalives */
  90. #define TCP_KEEPCNT        6    /* Number of keepalives before death */
  91. #define TCP_SYNCNT        7    /* Number of SYN retransmits */
  92. #define TCP_LINGER2        8    /* Life time of orphaned FIN-WAIT-2 state */
  93. #define TCP_DEFER_ACCEPT    9    /* Wake up listener only when data arrive */
  94. #define TCP_WINDOW_CLAMP    10    /* Bound advertised window */
  95. #define TCP_INFO        11    /* Information about this connection. */
  96. #define TCP_QUICKACK        12    /* Block/reenable quick acks */
  97. #define TCP_CONGESTION        13    /* Congestion control algorithm */
  98. #define TCP_MD5SIG        14    /* TCP MD5 Signature (RFC2385) */
  99.  
  100. #define TCPI_OPT_TIMESTAMPS    1
  101. #define TCPI_OPT_SACK        2
  102. #define TCPI_OPT_WSCALE        4
  103. #define TCPI_OPT_ECN        8
  104.  
  105. enum tcp_ca_state
  106. {
  107.     TCP_CA_Open = 0,
  108. #define TCPF_CA_Open    (1<<TCP_CA_Open)
  109.     TCP_CA_Disorder = 1,
  110. #define TCPF_CA_Disorder (1<<TCP_CA_Disorder)
  111.     TCP_CA_CWR = 2,
  112. #define TCPF_CA_CWR    (1<<TCP_CA_CWR)
  113.     TCP_CA_Recovery = 3,
  114. #define TCPF_CA_Recovery (1<<TCP_CA_Recovery)
  115.     TCP_CA_Loss = 4
  116. #define TCPF_CA_Loss    (1<<TCP_CA_Loss)
  117. };
  118.  
  119. struct tcp_info
  120. {
  121.     __u8    tcpi_state;
  122.     __u8    tcpi_ca_state;
  123.     __u8    tcpi_retransmits;
  124.     __u8    tcpi_probes;
  125.     __u8    tcpi_backoff;
  126.     __u8    tcpi_options;
  127.     __u8    tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;
  128.  
  129.     __u32    tcpi_rto;
  130.     __u32    tcpi_ato;
  131.     __u32    tcpi_snd_mss;
  132.     __u32    tcpi_rcv_mss;
  133.  
  134.     __u32    tcpi_unacked;
  135.     __u32    tcpi_sacked;
  136.     __u32    tcpi_lost;
  137.     __u32    tcpi_retrans;
  138.     __u32    tcpi_fackets;
  139.  
  140.     /* Times. */
  141.     __u32    tcpi_last_data_sent;
  142.     __u32    tcpi_last_ack_sent;     /* Not remembered, sorry. */
  143.     __u32    tcpi_last_data_recv;
  144.     __u32    tcpi_last_ack_recv;
  145.  
  146.     /* Metrics. */
  147.     __u32    tcpi_pmtu;
  148.     __u32    tcpi_rcv_ssthresh;
  149.     __u32    tcpi_rtt;
  150.     __u32    tcpi_rttvar;
  151.     __u32    tcpi_snd_ssthresh;
  152.     __u32    tcpi_snd_cwnd;
  153.     __u32    tcpi_advmss;
  154.     __u32    tcpi_reordering;
  155.  
  156.     __u32    tcpi_rcv_rtt;
  157.     __u32    tcpi_rcv_space;
  158.  
  159.     __u32    tcpi_total_retrans;
  160. };
  161.  
  162. /* for TCP_MD5SIG socket option */
  163. #define TCP_MD5SIG_MAXKEYLEN    80
  164.  
  165. struct tcp_md5sig {
  166.     struct __kernel_sockaddr_storage tcpm_addr;    /* address associated */
  167.     __u16    __tcpm_pad1;                /* zero */
  168.     __u16    tcpm_keylen;                /* key length */
  169.     __u32    __tcpm_pad2;                /* zero */
  170.     __u8    tcpm_key[TCP_MD5SIG_MAXKEYLEN];        /* key (binary) */
  171. };
  172.  
  173.  
  174. #endif    /* _LINUX_TCP_H */
  175.